//
//  AppDelegate.m
//  01-UIView、UIWindow
//
//  Created by QC.L on 16/7/14.
//  Copyright © 2016年 QC.L. All rights reserved.
//

#import "AppDelegate.h"
#import "UIView+Frame.h"
@interface AppDelegate () <UITextFieldDelegate>

@end

@implementation AppDelegate


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    // Override point for customization after application launch.
   // 程序的组成结构
   // 1.main.m 主要实现了程序的正常运行
   // 2.AppDelegate 程序的执行者，签订了UIApplicationDelegate（协议方法可选）
   // 注意： AppDelegate 就是一个普通的类， 只不过签订了协议， 才有了这么多的方法
   // 3.ViewController 试图控制器 主要负责视图管理 看得见， 摸得到的
   // 4. Main.sb （试图管理） LaunchScreen.sb （主要负责启动页） 可视化管理（ Xcode7 以前LaunchScreen.xib ）
   // 5. Assets.xcassets 主要用来管理图片素材 （Xcode7 以前叫 Images.xcassets）
   // 6.info.plist (工程配置文件)
    
   // 模拟器
   // command ＋ 1～5 改变模拟器的大小
   // command ＋ ⬅️ ／ ➡️ 横屏／竖屏 切换
    
   // iOS概述
   // 正确写法 iOS 错误写法 IOS Ios ios IoS
    
   //1. UIWindow （程序中只有一个主window）
   // 1> 取消程序的可视化入口， main.sb
   // 2> 创建主window对象
   // 1.创建 主 window ， 使其大小与屏幕一样
    // UIScreen 系统的屏幕类

    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
   //2. 给你创建的窗口填颜色 UIColor 系统的颜色类
    _window.backgroundColor = [UIColor whiteColor];
   // 3.让window 显示， 并成为主窗口 并 显示
    [_window makeKeyAndVisible];
    // 4. 设置window 的主窗口
    // Xcode 7 以后 ， 必须设置rootViewController 否则在该方法结束时 ，会崩溃。
    _window.rootViewController = [[UIViewController alloc] init];
    
#if 0
//    3> UIWindow 继承与 UIView
    
   // 2.UIView（与NSObject相似， 是UI阶段的根类 ， 大部分UI控件继承与UIView）
   // 学习新类
   // 1> 需要知道新类包含哪些初始化方法
   // 2> 包含哪些行为（方法）和特征 （属性）
    // 创建UIView
    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 250, 250)];
   // 设置背景色
    view.backgroundColor = [UIColor greenColor];
   // 添加到window 上
    [_window addSubview:view];
   // 遇到UIView的子类， 都可以用以上方式创建和显示
   // UIView在屏幕中显示为矩形
    
   // iOS系统坐标系
    // 1.与数学中的坐标系不同， y的正方向是向下的，
    // 2.原点是屏幕的左上角
    
   // frame bounds center
   // 1.frame （x，y，width， height）试图在其父试图上的位置
   // 2.bounds（x，y，width， height）试图本身的坐标系 （0，0，width，height）
   // bounds x, y  修改本身的坐标系， 影响它的子试图
   // bounds width， height修改的是本身的大小， 会以中心点的收缩／扩张
   // bounds 的改变，不会改变该试图的位置
   //
   // 3.center 中心点 （影响试图的位置）
    //    view.center = CGPointMake(50, 50);
//    view.frame = CGRectMake(10, 10, 80, 80);
    
   // bounds 对试图的影响测试
   // bounds 的x， y影响子试图的frame， 改变坐标系
   // CGRect 和 CGPoint
    NSLog(@"改变bounds前%@", NSStringFromCGRect(view.frame));
    NSLog(@"改变前的Center %@", NSStringFromCGPoint(view.center));
    view.bounds = CGRectMake(0, 0, 300, 300);
     NSLog(@"改变bounds后%@", NSStringFromCGRect(view.frame));
    NSLog(@"改变后的Center %@", NSStringFromCGPoint(view.center));

    UIView *subView = [[UIView alloc] initWithFrame:CGRectMake(10, 10, 40, 40)];
    subView.backgroundColor = [UIColor yellowColor];
    [view addSubview:subView];
    
   //  改变绿色view的大小， 变成100
    view.frame = CGRectMake(view.frame.origin.x, view.frame.origin.y, 100, view.frame.size.height);
   // view.frame是 get方法
   // frame.size 是结构体
   // OC和C的内容结合， 是一个常量
//    view.frame.size.width = 100;
    CGRect rect = view.frame;
    rect.size.width = 100;
    view.frame = rect;
    
    view.pf_width = 100;
    
#endif
   // UIView 的基本属性
    UIView *textView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
   // 添加
       [_window addSubview:textView];
   // 移除
//    [textView removeFromSuperview];
    // 1.背景颜色
    textView.backgroundColor = [UIColor cyanColor];
   // 2. alpha 透明度 0 ～ 1 默认值 1.0
    textView.alpha = 0.2;
   // 3. tag (编号) 默认是0
    textView.tag = 1000;
    // 根据tag获取对应得view __kindof
    UIView *view1 = [textView viewWithTag:1000];
    // 4.subViews 子试图们
   UIView *arrayView = [_window.subviews objectAtIndex:0];
    NSLog(@"%@", arrayView);
    // 5.superView; 父试图
// textView.superview;
    // 6 。hidden  隐藏／显示 YES/NO 默认是NO
    textView.hidden = YES;
   
    
   // 试图的层级
    UIView *firstView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 80, 80)];
    firstView.backgroundColor = [UIColor orangeColor];
    UIView *secondView = [[UIView alloc] initWithFrame:CGRectMake(10, 10, 80, 80)];
    secondView.backgroundColor = [UIColor greenColor];
    UIView *lastView = [[UIView alloc] initWithFrame:CGRectMake(20, 20, 80, 80)];
    lastView.backgroundColor = [UIColor blackColor];
   //addSubview (添加试图)
    [_window addSubview:firstView];
   //addSubview: atIndex: (插入试图，到指定下标)
    NSLog(@"%@", _window.subviews);
    [_window insertSubview:secondView atIndex:2];
   //insertSubview: aboveSubview:(插入试图，到指定试图的之上)
    [_window insertSubview:lastView aboveSubview:secondView];
    NSLog(@"%@", _window.subviews);
   //aboveSubview: belowSubview:
    [_window insertSubview:lastView belowSubview:secondView];
    NSLog(@"%@", _window.subviews);
    
   // UILabel (用来显示文本的)
   // 如果一个类没有自己的初始化方法， 则使用父类的
    
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(20, 100, 300,200)];
    label.backgroundColor = [UIColor yellowColor];
    [_window addSubview:label];
    
   // label的属性
   // 1.text 文本
    label.text = @"我是王煌, 我很帅的份考的飞机上的科技粉丝的肌肤时刻的见风使舵科技粉丝的科技粉丝的见风使舵反抗精神的方式非常了解范加尔今晚 i 而集散地附近的开发建设的飞机上的反抗精神";
   //textColor 文本颜色
    label.textColor = [UIColor lightGrayColor];
   // 3.font 默认值 17
    label.font = [UIFont systemFontOfSize:80];
    label.enabled = NO;
//    label.font = [UIFont boldSystemFontOfSize:16];
   //4.textAlignment 对齐方式 (默认对齐方式 NSTextAlignmentLeft)
  // left right center
    label.textAlignment = NSTextAlignmentCenter;
   // 5.numberOfLines (默认为1行)
   // 不确定行数时， 给0
    label.numberOfLines = 0;
   //6. lineBreakMode 换行模式， 。。。（省略号）的位置
    label.lineBreakMode = NSLineBreakByWordWrapping;
   // 7. 阴影 shadowColor
    label.shadowColor = [UIColor blackColor];
    label.shadowOffset = CGSizeMake(3, 5);
    
    // UIButton (用来点击的)
    //UIButtonTypeSystem 系统的按钮类型
    UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem];
    button.backgroundColor = [UIColor purpleColor];
    button.frame = CGRectMake(0, 300, 100, 100);
    [_window addSubview:button];
   // 给button添加事件
    [button addTarget:self action:@selector(buttonClicked) forControlEvents:UIControlEventTouchUpInside];
   //给button添加文字
    [button setTitle:@"点我呀！" forState:UIControlStateNormal];
   // 修改button的文字颜色
    [button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
    
   // UITextField
    UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(100, 100, 200, 50)];
    [_window addSubview:textField];
//    textField.backgroundColor = [UIColor redColor];
   //　1.text 给输入框赋了个初值
//    textField.text = @"文字";
   // 2. textColor
    textField.textColor = [UIColor blackColor];
   // 3. borderStyle 边缘样式
//    默认UITextBorderStyleNone无
//   UITextBorderStyleLine 有边缘线
//    UITextBorderStyleBezel
//    UITextBorderStyleRoundedRect 边缘带圆角
    textField.borderStyle = UITextBorderStyleRoundedRect;
//   4.placeholder 占位字符
//    当text不为空时，placeholder是不显示的
    textField.placeholder = @"请输入用户名";
// 5.clearsOnBeginEditing 开始编辑是清空
    textField.clearsOnBeginEditing = YES;
//    command + K 显示／收起键盘
    textField.delegate = self;
    
    textField.clearButtonMode = UITextFieldViewModeAlways;
    
    return YES;
}
- (void) buttonClicked {
//    结束编辑
    [_window endEditing:YES];
    NSLog(@"我被点了");
}
// 开始编辑前，判断能否进行编辑
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
//    return YES 可以编辑
//    return NO  不可以编辑
    return YES;
}
// 已经开始编辑时
- (void)textFieldDidBeginEditing:(UITextField *)textField {
    
    
}
// 判断是否结束编辑
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField {
    return YES;
}
// 已经结束编辑
- (void)textFieldDidEndEditing:(UITextField *)textField {
    
}

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
  //处理， 点击return， 需要进行的操作
//    回收键盘
    [textField endEditing:YES];
    return YES;
}
- (void)applicationWillResignActive:(UIApplication *)application {
    // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
    // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
}

- (void)applicationDidEnterBackground:(UIApplication *)application {
    // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
    // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
}

- (void)applicationWillEnterForeground:(UIApplication *)application {
    // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
}

- (void)applicationDidBecomeActive:(UIApplication *)application {
    // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
}

- (void)applicationWillTerminate:(UIApplication *)application {
    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
}

@end
